import java.util.Scanner;
import java.util.Arrays;
/**
 * 
 * 爱吃蟠桃的孙悟空
 * 
 * 题目描述

孙悟空爱吃蟠桃，有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵桃树，每颗树上都有桃子，守卫将在 H 小时后回来。

孙悟空可以决定他吃蟠桃的速度K（个/小时），每个小时选一颗桃树，并从树上吃掉 K 个，如果树上的桃子少于 K 个，则全部吃掉，并且这一小时剩余的时间里不再吃桃。

孙悟空喜欢慢慢吃，但又想在守卫回来前吃完桃子。

请返回孙悟空可以在 H 小时内吃掉所有桃子的最小速度 K（K为整数）。如果以任何速度都吃不完所有桃子，则返回0。

输入描述
第一行输入为 N 个数字，N 表示桃树的数量，这 N 个数字表示每颗桃树上蟠桃的数量。

第二行输入为一个数字，表示守卫离开的时间 H。

其中数字通过空格分割，N、H为正整数，每颗树上都有蟠桃，且 0 < N < 10000，0 < H < 10000。

输出描述
吃掉所有蟠桃的最小速度 K，无解或输入异常时输出 0。

用例
输入	2 3 4 5
4
输出	5
说明	无
输入	2 3 4 5
3
输出	0
说明	无
输入	30 11 23 4 20
6
输出	23
说明	无

 */

 /**
  * 
  题目解析
本题可以使用二分法解题。
  */
public class 爱吃蟠桃的孙悟空 {
    public static void main(String[] args) {
        
        try{

            Scanner scanner = new Scanner(System.in);
            int[] line1Arr = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            int hours = Integer.parseInt(scanner.nextLine());

            if(hours < line1Arr.length){

                //1个小时只能吃一棵树，小时数 小于 树棵数，这不能吃完
                System.out.println(""+0);

                return;
            }

            //int maxSpeed = Arrays.stream(line1Arr).max().orElse(0);
            int maxSpeed = getMax(line1Arr);

            if(hours == line1Arr.length){

                //吃桃速度 = 每棵树的最大桃数
                System.out.println(""+maxSpeed);

                return;
            }

            int rightSpeed = maxSpeed;

            //二分法
            int minSpeed = 1;

            while(minSpeed < maxSpeed){

                int middleSpeed = (maxSpeed + minSpeed) / 2;

                //判断middlespeed 可不可以吃完
                if(isDone(middleSpeed, hours, line1Arr)){
                    rightSpeed = middleSpeed;
                    //左边
                    maxSpeed = middleSpeed - 1;

                } else {

                    minSpeed = middleSpeed + 1;

                }


            }

            System.out.println(""+rightSpeed);


        }catch(Exception e){
            e.printStackTrace();
            System.out.println(""+0);
        }
    }

    private static boolean isDone(int speed, int hours, int[] count){

        int hoursCount = 0;
        for(int c : count){

            if(c % speed > 0){
                hoursCount += c / speed +1;
            } else{
                hoursCount += c / speed;
            }

        }

        return hoursCount - hours <= 0;
    }

    private static int getMax(int[] arr){


        int maxValue = arr[0];

        for(int i=1; i<arr.length; i++){
            maxValue = Math.max(maxValue, arr[i]);
        }

        return maxValue;
    }
}
